import { CacheToken } from "@/constants/cacheKey";
import { ICacheOptions } from "@/types/interface";
import { isNullOrUndefined } from "./utils";

const fix = "v1@";

/**
 * 存储介质适配器
 * @param isSessionStorage
 * @returns
 */
const cacheAdapter = (isSessionStorage?: boolean) => {
  return isSessionStorage ? sessionStorage : localStorage;
};

/**
 * 取缓存值
 * @param {*} key
 * @param {*} options
 */
export const getCache = (key: string, options?: ICacheOptions, defaultValue?: unknown): any => {
  key = fix + key;
  options = { isParse: true, isDelete: false, ...options };
  try {
    const value = cacheAdapter(options.isSessionStorage).getItem(key);
    if (options.isDelete) {
      cacheAdapter(options.isSessionStorage).removeItem(key);
    }
    return isNullOrUndefined(value)
      ? defaultValue
      : options.isParse
      ? value
        ? JSON.parse(value)
        : defaultValue
      : value;
  } catch (error) {
    console.error("getCache", error);
    return defaultValue;
  }
};

/**
 * 设置缓存值
 * @param {*} key
 * @param {*} value
 */
export const setCache = (
  key: string,
  value: string | Record<string, unknown> | Array<any>[],
  isSessionStorage?: boolean
): void => {
  key = fix + key;
  cacheAdapter(isSessionStorage).setItem(
    key,
    typeof value === "object" ? JSON.stringify(value) : value
  );
};

export const setlocalStorageCache = (value: any) => {
  localStorage.setItem("loginInfo", JSON.stringify(value));
}


export const getCookie = (name:any) => {
  const cookies = document.cookie.split('; ');
  for (let i = 0; i < cookies.length; i++) {
      const parts = cookies[i].split('=');
      if (parts[0] === name) {
          return decodeURIComponent(parts[1]);
      }
  }
  return null;
}
export const getlocalStorageCache = () => {

  const aa:any = localStorage.getItem("loginInfo");
  if (aa != null) {
    const a = JSON.parse(aa);
    return a["access_token"];
  }
  return null;
}

const deleteCookie = (name:any, path:string = '/', domain?:string) => {
  if (getCookie(name)) {
    document.cookie = `${name}=; Max-Age=-99999999;path=${path}` + (domain ? `;domain=${domain}` : '');
  }
}

export const deleteLocalStorageCache = () => {
  deleteCookie("token-params");
  localStorage.removeItem("loginInfo");
}

/**
 * 清除缓存
 * @param key
 * @param isSessionStorage
 */
export const removeCache = (key: string, isSessionStorage?: boolean): void => {
  key = fix + key;
  cacheAdapter(isSessionStorage).removeItem(key);
};

export const getToken = (): string => {
  return getTokenLocal();
  // return getCache(CacheToken, { isSessionStorage: true }, {})["access_token"];
};
export const getTokenLocal = ():string => {
  return getlocalStorageCache();
}
